package cn.iocoder.yudao.module.crm.service.receipt;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.crm.controller.admin.receipt.vo.*;
import cn.iocoder.yudao.module.crm.dal.dataobject.receipt.ReceiptDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;

/**
 * crm发票管理 Service 接口
 *
 * @author 超级管理员
 */
public interface ReceiptService {

    /**
     * 创建crm发票管理
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createReceipt(@Valid ReceiptSaveReqVO createReqVO, Long userId);

    /**
     * 更新crm发票管理
     *
     * @param updateReqVO 更新信息
     */
    void updateReceipt(@Valid ReceiptSaveReqVO updateReqVO);

    /**
     * 删除crm发票管理
     *
     * @param id 编号
     */
    void deleteReceipt(Long id);

    /**
    * 批量删除crm发票管理
    *
    * @param ids 编号
    */
    void deleteReceiptListByIds(List<Long> ids);

    /**
     * 获得crm发票管理
     *
     * @param id 编号
     * @return crm发票管理
     */
    ReceiptDO getReceipt(Long id);

    /**
     * 获得crm发票管理分页
     *
     * @param pageReqVO 分页查询
     * @return crm发票管理分页
     */
    PageResult<ReceiptDO> getReceiptPage(ReceiptPageReqVO pageReqVO, Long userId);

    /**
     * 发起发票审批流程
     *
     * @param id     发票编号
     * @param userId 用户编号
     */
    void submitReceipt(Long id, Long userId);

    /**
     * 更新发票流程审批结果
     *
     * @param id        发票编号
     * @param bpmResult BPM 审批结果
     */
    void updateReceiptAuditStatus(Long id, Integer bpmResult);

    /**
     * 获得待审核发票数量
     *
     * @param userId 用户编号
     * @return 提醒数量
     */
    Long getAuditReceiptCount(Long userId);


}